import router from "@/router";
import axios from "axios";
import config from  "config";
 "./config";

export default function request() {
    return new Promise(() => {
        const instance = axios.create({
            ...config
        })

        //request 请求拦截器
        instance.interceptors.request.use(
            (config) => {
                let token = localStorage.getItem("pm_token");
                //发送请求时携带token
                if(token) {
                    config.headers.token = token;
                } else {
                    router.push("/login");
                }
                return config;
            },
            (error) => {
                //请求发生错误时
                console.log("request:",error);
                //判断请求超市=时
                if (
                    error.code ==="ECONNABORTED" &&
                    error.message.indexOf("timeout") !== -1
                ) {
                    ELMessage({
                    ELMessage: "请求超时",
                    type: "error",
                    showClose: true 
                  });              
            }
            return Promise.reject(error);
            }
        );

        //响应拦截器
        instance.interceptors.response.use(
            (request) => {
                return response.data;
            },
            (err) => {
                if (err && err,response) {
                    /* eslint-disable*/
                    switch (err.response.status) {
                        case 400:
                            err.message = "请求错误";
                            break;
                            // ...
                            default:
                    }  
                    /* eslint-enable */
                }
                console.error(err);
                if (err.message) {
                    ELMessage({
                        message:err.message, type: "error", showClose:true
                    });
                }
                return Promise.reject(err); // 返回接口返回的错误信息
            }
        );

        //请求处理
        instance(Options)
        .then((res) =>{
            /**
             * response 同意格式
             * {
             * code:200,
             * msg" '消息[String]'
             * data: '返回数据[Any]'
             * }
             * code说明:
             * 200 成功
             * -1 失败，可能网络不通，可能后台服务异常或其他异常
             * -2 登录失败跳回登录
             */
            if (res.code == 200) {
                resolve(res);
            } else {
                //未登录
                if (res.code === -2) {
                    router.push("/login");
                }
                ELMessage({
                    message: res.msg || "操作失败",
                    type: "error",
                    showClose:true
                });
                reject(res);
            }
        })
        .catch((error) => {
            reject(error);
        
    });
    )